package com.retail.core.common;

import com.retail.core.entity.CommonEntity;
import com.retail.core.entity.ParamReq;
import com.retail.core.entity.result.PageResult;
import com.retail.core.entity.result.Result;

import java.util.List;

/**
 * 基础api中使用的接口
 * 此处只用在基础即可的编写中
 *
 * @author administrator
 */
public interface CommonController<S extends CommonService, E extends CommonEntity, R extends CommonEntity> {

    /**
     * 查询基本信息
     *
     * @param s  service 对象
     * @param id 编号（主键）
     */
    Result<E> getModel(S s, Long id);

    /**
     * 保存数据
     *
     * @param s service 对象
     * @param t 对象
     */
    Result<Integer> save(S s, E t);

    /**
     * 更新基础信息
     *
     * @param s service 对象
     * @param t 对象
     * @return
     */
    Result<Integer> update(S s, E t);

    /**
     * 查询基础数据
     *
     * @param s   service 对象
     * @param req current size params
     * @return 返回列表集合
     */
    Result<List<R>> listPage(S s, ParamReq<E> req) ;

    /**
     * 查询基础数据量
     *
     * @param s   service 对象
     * @param req 请求对象
     * @return 返回查询数据量
     */
    Result<Integer> countPage(S s, ParamReq<E> req) ;

    /**
     * 分页查询基础数据
     *
     * @param s   service 对象
     * @param req 请求对象
     * @return
     */
    Result<PageResult> page(S s, ParamReq<E> req) ;

    /**
     * 删除数据
     *
     * @param s  service 对象
     * @param id
     * @return
     */
    Result<Integer> delete(S s, Long id);

    /**
     * 批量删除数据
     *
     * @param s   service 对象
     * @param ids
     * @return
     */
    Result<Integer> batchDelete(S s, List<Long> ids);
}
